const path = require('path');
const fs = require('fs');
const { fileUploadError, unSupportedFileType, publishGoodsErro, invalidGoodsID, removeGoodsID, offGoodsID, findGoodsErr } = require('../constant/err.type');
const { createGoods, updateGoods, removeGoods, off, restoreGoods, findGoods } = require('../service/goods.service')

class GoodsController {
    async upload(ctx, next) {
        console.log(ctx.request.files.file);
        const { file } = ctx.request.files;
        const fileTypes = ['image/jpeg', 'image/png'];
        if (file) {
            if (!fileTypes.includes(file.mimetype)) {
                fs.unlink(file.filepath, (err) => {
                    if (err) {
                        return ctx.app.emit('error', fileUploadError, ctx);
                    }
                });
                return ctx.app.emit('error', unSupportedFileType, ctx);
            }
            // 定义文件保存路径
            const uploadDir = path.join(__dirname, '../upload'); // 假设你有一个uploads目录
            const filePath = path.join(uploadDir, path.basename(file.filepath));
            // 将文件移动到目标目录
            fs.rename(file.filepath, filePath, (err) => {
                if (err) {
                    return ctx.app.emit('error', fileUploadError, ctx);
                }
            });
            ctx.body = {
                code: "200",
                message: "图片上传成功",
                result: {
                    goods_img: path.basename(filePath),
                }
            };
        } else {
            return ctx.app.emit('error', fileUploadError, ctx)
        }
        // ctx.body = '图片上传成功'
    }

    async create(ctx) {
        // 调用search的createGoods方法
        console.log("ctx.request.body", ctx.request.body);
        try {
            const { updatedAt, createdAt, ...res } = await createGoods(ctx.request.body)
            ctx.body = {
                code: "200",
                message: '发布商品成功',
                result: res
            }
        } catch (err) {
            console.error("err", err);
            return ctx.app.emit('error', publishGoodsErro, ctx)
        }

    }

    async update(ctx) {
        try {
            const res = await updateGoods(ctx.params.id, ctx.request.body)
            if (res) {
                ctx.body = {
                    code: "200",
                    message: '修改商品成功',
                    result: '',
                }
            } else {
                return ctx.app.emit("error", invalidGoodsID, ctx)
            }
        } catch (err) {
            console.error(err)
        }

    }

    async remove(ctx) {
        try {
            const res = await removeGoods(ctx.params.id)
            if (res) {
                ctx.body = {
                    code: "200",
                    message: "删除商品成功",
                    result: ""
                }
            } else {
                return ctx.app.emit("error", removeGoodsID, ctx)
            }

        } catch (err) {
            console.error(err)
        }

    }

    async off(ctx) {
        try {
            const res = await off(ctx.params.id)
            if (res) {
                ctx.body = {
                    code: "200",
                    message: "下架商品成功",
                    result: ""
                }
            } else {
                return ctx.app.emit("error", offGoodsID, ctx)
            }

        } catch (err) {
            console.error(err)
        }

    }

    async restore(ctx) {
        try {
            const res = await restoreGoods(ctx.params.id)
            if (res) {
                ctx.body = {
                    code: "200",
                    message: "上架商品成功",
                    result: ""
                }
            } else {
                return ctx.app.emit("error", offGoodsID, ctx)
            }

        } catch (err) {
            console.error(err)
        }
    }

    async findAll(ctx) {
        // 解析pageNum,pageSize
        const { pageNum = 1, pageSize = 10 } = ctx.request.query
        // 调用数据处理的方法
        const res = await findGoods(pageNum, pageSize)
        try {
            if (res) {
                ctx.body = {
                    code: "200",
                    message: "商品获取成功",
                    result: res
                }
            } else {
                return ctx.app.emit("error", findGoodsErr, ctx)
            }
        } catch (err) {
            console.error(err);
        }

        // 返回数据
    }
}

module.exports = new GoodsController();